

#include "main.h"




/********************************************************
**函数名：	BSW_FTM_INIT_PWM
**功能：		初始化FTM-PWM
**输入参数Ftm_Cfg
**返回值：	无
**注意：		
********************************************************/
void BSW_FTM_INIT_PWM(Bsw_FTM_Cfg Ftm_Cfg)
{
	PCC_SetClockMode(PCC, Ftm_Cfg.clockName, false);
	PCC_SetPeripheralClockControl(PCC, Ftm_Cfg.clockName, true, Ftm_Cfg.u32_clockSource, 0, 0);
	PCC_SetClockMode(PCC, Ftm_Cfg.clockName, true);
	
	FTM_DRV_SetWriteProtectionCmd(Ftm_Cfg.ftmBase,Ftm_Cfg.b_WriteProtection);							                /* Write protect to registers disabled (default)  */
	FTM_DRV_SetTimerOverflowInt(Ftm_Cfg.ftmBase, Ftm_Cfg.b_TimerOverflow);							  	              /* TOIE (Timer Overflow Interrupt Ena) = 0 (default) */
	FTM_DRV_SetClockSource(Ftm_Cfg.ftmBase, FTM_CLOCK_SOURCE_NONE);		                                    /* CLKS (Clock source) = 0 (default, no clock; FTM disabled) */
	FTM_DRV_SetClockPs(Ftm_Cfg.ftmBase, Ftm_Cfg.Clk_Ps);								                                  /* PS (Prescaler factor) = 7. Prescaler = 128  */
	FTM_DRV_SetCpwms(Ftm_Cfg.ftmBase,Ftm_Cfg.b_Cpwms);													                        	/* CPWMS (Center aligned PWM Select) = 0 (default, up count) */
	FTM_DRV_SetMod(Ftm_Cfg.ftmBase,Ftm_Cfg.u16_Per_value);						                                  	/* FTM0 counter final value (used for PWM mode) */
	FTM_DRV_SetClockSource(Ftm_Cfg.ftmBase,Ftm_Cfg.Clock_Source);				                                  /* Sets the FTM clock source */
}

/********************************************************
**函数名：	BSW_FTM_CH_INIT
**功能：		初始化FTM-CH通道
**输入参数	FtmCh_Cfg 
**返回值：	无
**注意：		
*********************************************************/
void BSW_FTM_CH_INIT(Bsw_Ftm_Ch_Cfg FtmCh_Cfg)
{
	FTM_DRV_SetDualChnPwmSyncCmd(FtmCh_Cfg.ftmBase, FtmCh_Cfg.u32_ChNum, FtmCh_Cfg.b_DualChnSync);					/* FTM mode settings used: DECAPENx, MCOMBINEx, COMBINEx=0  */
	FTM_DRV_SetChnOutputPolarityCmd(FtmCh_Cfg.ftmBase,FtmCh_Cfg.u32_ChNum,FtmCh_Cfg.b_ChnPolarity);					/* Polarity for all channels is active high (default) */
	FTM_DRV_DisableChnInt(FtmCh_Cfg.ftmBase,FtmCh_Cfg.u32_ChNum);													                  /* CHIE (Chan Interrupt Ena) = 0 (default) */
	FTM_DRV_SetChnEdgeLevel(FtmCh_Cfg.ftmBase,FtmCh_Cfg.u32_ChNum,FtmCh_Cfg.u8_ChnEdgelevel);								/* ELSB:ELSA (chan Edge/Level Select)=0b10, low true */
	FTM_DRV_SetChnMSnBAMode(FtmCh_Cfg.ftmBase,FtmCh_Cfg.u32_ChNum,FtmCh_Cfg.u8_ChnMSnBA);									  /* MSB:MSA (chan Mode Select)=0b10, Edge Align PWM */
	FTM_DRV_SetChnCountVal(FtmCh_Cfg.ftmBase,FtmCh_Cfg.u32_ChNum,FtmCh_Cfg.u16_ChnCountVal);								/* FTM0 ch0 compare value(~75% duty cycle) */
	FTM_DRV_EnablePwmChannelOutputs(FtmCh_Cfg.ftmBase,FtmCh_Cfg.u32_ChNum);                                 /* Enable PWM channel Outputs. */
}

/********************************************************
**函数名：	BSW_FTM_Update_PWM
**功能：		更新占空比
**输入参数	Ftm_Cfg
**返回值：	无
**注意：		
*********************************************************/
inline void BSW_FTM_Update_PWM(Bsw_Ftm_Ch_Cfg FtmCh_Cfg,u16 u16_Duty_Val)
{
	FTM_DRV_SetChnCountVal(FtmCh_Cfg.ftmBase,FtmCh_Cfg.u32_ChNum,u16_Duty_Val); 			/* Sets the FTM peripheral timer channel counter value. */
}

/********************************************************
**函数名：	FTM0_Ch0_Ch1_IRQHandler
**功能：		FTM0_Ch0_Ch1 中断函数入口
**输入参数：无
**返回值：	无
**注意：		
*********************************************************/
void FTM0_Ch0_Ch1_IRQHandler(void) 
{
	/*
	FTM_DRV_ClearReloadFlag(FTM0);
	FTM_DRV_ClearChnTriggerFlag(FTM0);
  FTM_DRV_ClearChnEventStatus(FTM0, 0);
	FTM0_CH0_CH1_IRQ();
	*/
}

/********************************************************
**函数名：	FTM0_Ovf_Reload_IRQHandler
**功能：		FTM0 周期溢出 中断函数入口
**输入参数：无
**返回值：	无
**注意：		
*********************************************************/
void FTM0_Ovf_Reload_IRQHandler(void) 
{
	FTM_DRV_ClearTimerOverflow(FTM0);                     /* Clears the timer overflow interrupt flag. */
	FTM0_OVF_Reload_IRQ();	
}

